import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.*;
/**
 * Write a description of class donRamon here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class donRamon extends Actor
{
   private boolean band=false;
   private boolean bandTermino=false;
   private int quitaLet=0;
   private Tiempo t2= new Tiempo(1,4);//Tiempo de congelacion cuando choca con algun objeto
    /**
     * Act - Este metodo constituye los movimientos de el objeto
     */
    public void act() 
    {
         if(bandTermino==false)
         {
           checaTiempo();
           mueve();
           checaChoquechavo();
           checaChoquetrampa();
           chocaPelota();
        }
        else
        {
            regresaDonRamon();
            
        }
    }
     /**
     * Este metodo genera el movimiento de el objeto
     */ 
   public void mueve()
   {
       Mundo mundo=(Mundo)getWorld();
       List donramon = getObjectsInRange(560, chavo.class);
       
       if(band==false&&quitaLet==1)//valida si el tiempo de choque llego a cero y quita letrero de tiempo y lo reinicia
        {
          mundo.removeObject(t2);
          t2=new Tiempo(1,4);
          
        } 
        if (!donramon.isEmpty()&& band==false)
        {
            chavo chavo = (chavo)donramon.get(0);
            int distX = chavo.getX();
            int distY = chavo.getY();
             if(distX<= getX())
             {
                  move(-1);
             }
             else if(distX >=getX())
             {
                   
                  move(1);
             }
           
            if(distY > getY())
                 setLocation(getX(), getY()+1);
            else if(distY <getY())
                setLocation(getX(), getY()-1);
          
        }
       
   }
     /**
     * checa choque con otro objeto de la clase chavo
     */
   public void checaChoquechavo()
   {
        Actor act;
        act=getOneObjectAtOffset(0,0,chavo.class);
        Tiempo t;
        Mundo mundo;
        mundo=(Mundo)getWorld();
        t=mundo.regresaTiempoDonramon();
        
        
        if(act!=null)
        {
            
            t.decrementaTiempo(5);
            setLocation(100,300);
            
            
        }
 
    }
      /**
     *checa choque con otro objeto de la clase pelota
     */
    public void chocaPelota()
    {
        Actor act,act2,act3;
        Mundo mundo;
        mundo=(Mundo)getWorld();
        
        act=getOneObjectAtOffset(0,0,pelota.class);
        if(act!=null)
        {
           mundo.addObject(t2,act.getX(),getY());
           band=true;
           mundo.removeObject(act);
           
        }
        act2=getOneObjectAtOffset(0,0,popis.class);
         if(act2!=null)
        {
            setLocation(100,100);

        }
        act3=getOneObjectAtOffset(0,0,chilindrina.class);
         if(act3!=null)
        {
            setLocation(100,100);

        }
    }
      /**
     * checa el tiempo de juego y manda los mensajes necesarios
     */
    public void checaTiempo()
    {
        long tdon,tchavo;//variables para guardar el estado de tiempo en el que se encuentra el chavo y don ramon
        Letrero let;
        chavo cha;
        kiko k;
        nono n;
        let = new Letrero("PERDISTE.....");
        Mundo mundo;
        mundo = (Mundo)getWorld();
        cha=mundo.regresaChavo();
        k=mundo.regresaKiko();
        n=mundo.regresaNono();
        
        Tiempo t1,t2;
        
        t1=mundo.regresaTiempoDonramon();//Regresa el objeto de tiempo don Ramon
        t2=mundo.regresaTiempoChavo();
        tdon=t1.regresaTiempo();// Regresa de la clase tiempo el valor actual de tiempo chavo
        tchavo=t2.regresaTiempo();
        
        
        
       if(tdon<=0 && tchavo>0)
       {
           mundo.addObject(let,200,200);
           cha.actualizaBand(true,0);
           k.actualizaBand(true);
           n.actualizaBand(true);
           mundo.removeObject(t1);
           mundo.removeObject(t2);
           band=true;
           bandTermino=true;

       }
    
    }
      /**
     * checa el choque de este objeto con un objeto de la clase trampa
     */
     public void checaChoquetrampa()
   {
        Actor act;
        act=getOneObjectAtOffset(0,0,globo.class);
        Tiempo t3;
        Mundo mundo;
        mundo=(Mundo)getWorld();
        t3=mundo.regresaTiempoDonramon();
        
        
        if(act!=null)
        {
            mundo.removeObject(act);
            t3.incrementaTiempo(20);
           
        }
        
       
    }
      /**
     * Actualiza la bandera de movimiento del jugador
     */
    public void actualizaBand(boolean b,int cont)//Actualiza las banderas de los dos contadores
    {
        band=b;
        quitaLet=cont;//Se checa cuando tiempo de congelacion es igual a cero y se hace cero desde la clase tiempo 
        
    } 
      /**
     * Este metodo al mermino de nivel regresa a su posicion actual a el objeto de la clase don ramon
     */
   public void regresaDonRamon()
   {
       Mundo mundo;
       mundo=(Mundo)getWorld();
  
       if(getX()<157)
                move(1);
       if(getX()>157)
                move(-1);
       if(getY()>100)
                setLocation(getX(),getY()-1);
      if(getY()<100)
                setLocation(getX(),getY()+1);
       if(getX()==157 && getY()==100)
       {
                 mundo.remove();
                 mundo.actualizaActivo(true);
                
       }
           
               
    }
    

    
}
